package com.changhong.framework.sdfs.namenode.server.context;

import java.util.concurrent.ConcurrentHashMap;

/**
 * 上下文存储对象
 * @author Summer
 */
public class DefaultNameNodeContext implements NameNodeContext {

    /**
     * 用来保存已经刷入磁盘的索引数据
     * 1-30  1,30
     * 30-60 30，60
     */
    private final ConcurrentHashMap<String,StartEndOperationLog> startEndIndexMap=new ConcurrentHashMap<>();

    /**
     * 刷盘最大的id
     */
    private volatile static Long maxId;

    public DefaultNameNodeContext(){

    }


    /**
     * 添加索引数据到map中
     * @param index 索引拼接数据
     * @param start 开始下标
     * @param end 结束下标
     */
    @Override
    public void addStartEndOperationIndex(String index, Long start, Long end){
        StartEndOperationLog startEndOperationLog= new StartEndOperationLog(start, end);
        startEndIndexMap.put(index,startEndOperationLog);
    }

    /**
     * 获取已经刷入磁盘的下标对应的数据
     * @return 刷盘数据对象
     */
    @Override
    public ConcurrentHashMap<String,StartEndOperationLog> getStartEndIndexMap(){
        return startEndIndexMap;
    }

    /**
     * 刷新最大的id
     * @param id 刷盘id
     */
    @Override
    public void refreshMaxId(Long id){
        maxId=id;
    }

    /**
     * 获取最大的刷盘id
     * @return 最大id
     */
    @Override
    public Long getMaxId(){
        return maxId;
    }

}
